Skip to content

fix(ai-accounts): make the quota bar green legible instead of neutral - #938

Merged
kittors merged 1 commit into
devfrom
fix/quota-bar-legible-green
Aug 21, 2026
Merged

fix(ai-accounts): make the quota bar green legible instead of neutral#938
kittors merged 1 commit into
devfrom
fix/quota-bar-legible-green

Conversation

@kittors

@kittors kittors commented Aug 21, 2026

Copy link
Copy Markdown
Owner

Panel-only. Corrects the diagnosis behind #936 and #937.

What those two got wrong

They read the flat green field as too much colour and drained it to slate. Wrong call. The bar was never too green β€” the green was a 20%-opacity wash sitting under text-slate-600 labels and text-slate-400 countdowns. Nothing on the row had enough contrast to read comfortably, and removing the colour just made a dull row duller.

The construction

Element Before Now
Fill opacity-20 wash over bg-emerald-500 solid bg-emerald-100, no opacity wrapper
Percentage marker the wash's own edge, invisible border-r-2 border-emerald-400 down the fill's right edge
Label hardcoded text-slate-600 text-emerald-900 (from the tone)
Countdown hardcoded text-slate-400 text-emerald-700 (from the tone)
Percent text-emerald-700 text-emerald-900
Track hardcoded border-slate-200/70 bg-slate-50/60 border-emerald-200 bg-white (from the tone)

Two ideas carry it:

Saturation goes on the 2px edge, not the full-width background. The fill is the row's own background, so at 100% it covers the entire line β€” a saturated fill there is a solid band, and a grid of cards becomes a wall of colour that is tiring to scan and, being always on, signals nothing. A light tint plus a hard edge reads the value more precisely, especially at 100% where a block boundary doesn't exist.

Every element on the row belongs to one colour family. The track, label, countdown and percent all come off the tone now instead of hardcoded slate, so amber and rose get the same construction for free.

The subscription badge and the β‰₯90% success rate return to emerald too β€” #936 drained both, and neither was ever the problem.

Verified

Rendered with the app's own compiled CSS, light and dark, at 84 / 100 / 62 / 45 / 8%. The edge marks the value at every step; labels stay legible on both the tint and the bare track; dark mode inverts to a deep fill with light text.

design:check βœ… Β· size:check βœ… Β· surface:check βœ… Β· lint 0 errors βœ… Β· 243 tests / 21 files βœ…

Two assertions move text-rose-700 β†’ text-rose-900: depletion is still rose, one stop darker for legibility.

πŸ€– Generated with Claude Code

#936 and #937 read the flat green field as too much colour and drained it
to slate. That was the wrong diagnosis: the problem was never that the
bar was green, it was that the green was a 20%-opacity wash under
text-slate-600 labels and text-slate-400 countdowns β€” nothing on the row
had enough contrast to read, and draining the colour only made a dull
row duller.

Restore the green and spend the contrast where it earns something:

  - The fill drops the opacity wrapper for a solid but light tint
    (emerald-100), so text sits on a known colour instead of a wash.
  - A 2px rule runs down the fill's right edge. That edge is what
    encodes the percentage, and it locates the value far more precisely
    than a block boundary β€” which matters most at 100%, where the fill
    covers the whole row and had no visible boundary at all.
  - Label, countdown and percent move onto the tone (emerald-900 /
    emerald-700 / emerald-900) rather than hardcoded slate, so every
    element on the row belongs to one colour family.

Keeping the tint light is what stops a grid of cards becoming a wall of
colour: saturation is spent on the 2px edge, not on the full-width
background. Amber and rose follow the same construction, so a bar that
changes colour still reads as a change of state.

The subscription badge and the >=90% success rate return to emerald as
well; both were drained by #936 and neither was the source of the
problem.

Two assertions move from text-rose-700 to text-rose-900: the depleted
state is still rose, one stop darker for legibility.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@kittors
kittors merged commit 6420fe2 into dev Aug 21, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant